package com.kaifamiao.date1102;

/**
 * 基本数据类型
 * byte   : 1个字节(byte)， 8个二进制位(bit)
 * short  : 2个字节(byte)，16个二进制位(bit)
 * int    : 4个字节(byte)，32个二进制位(bit)
 * long   : 8个字节(byte)，64个二进制位(bit)
 * float  : 4个字节(byte)，32个二进制位(bit) [按照IEEE754标准存储]
 * double : 8个字节(byte)，64个二进制位(bit) [按照IEEE754标准存储]
 * char   : 2个字节(byte), 16个二进制位(bit)
 * boolean: 1个字节(byte)， 8个二进制位(bit)
 */
public class ConvertTest {

	public static void main(String[] args) {
		
		// 八进制(0、1、2、3、4、5、6、7)
		int a = 077 ;
		System.out.println( a );
		
		// 十六进制(0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F)
		int b = 0xAB ;
		System.out.println( b );
		
		// 十进制形式(0、1、2、3、4、5、6、7、8、9)
		int x = 100 ; 
		System.out.println( x );
		
		// 二进制形式(0、1)
		int y = 0b0000_0000_0000_0000_0000_0000_1000_0011; 
		System.out.println( y );
		
		// 整数类型的强制类型转换会将高位部分舍弃保留低位部分
		int z = (byte)y ; // 1000_0011;
		System.out.println( z );
		
		// 因为 byte 只占 8 个二进制位，所以需要将 最高位当作符号位来处理
		// 将 1_000_0011 当作一个负整数的补码来对待，
		// 根据补码可以得到这个负整数的反码: 1_000_0010
		// 再根据反码求原码: 1_111_1101
		// 根据绝对值部分求值，加上符号即为相应数值
		
	}

}
